This application relates generally to resource allocation. More particularly, the disclosure provided herein relates to systems and methods for dynamically allocating multitier applications based upon application requirements and resource characteristics.
In cloud or network-based computing, resources such as hardware, software, and data can be shared and can be provided to user devices on-demand, according to user desires and needs. According to various implementations, applications are delivered online, where the software and data used to drive the applications can be stored at one or more servers or other devices that are remote from user devices accessing the applications.
In general, cloud computing infrastructure includes applications and/or services that are delivered via one or more resource tiers or levels. The resource levels include, at a highest level, a number of data centers. The data centers, in turn, can include a number of server clusters, which in turn include a number of racks. The racks can include a number of server machines. In some cases, applications may be distributed across a number of tiers including data centers, server clusters, racks, and/or servers to provide redundancy and/or to increase reliability and availability of the applications. The resources can be geographically remote from one another and may have diverse capacities, reliabilities, availabilities, latencies, and/or other performance metrics.
Determining what resources or tier of resources should host applications in cloud computing environments may require a tradeoff. In particular, hosting an application at a particular resource or tier of resources may result in good performance, but simultaneously may negatively impact application reliability and availability. Furthermore, determining how and where to replicate application components may require additional analysis. If the resource hosting particular application components goes offline, the application components or the functionality thereof may be lost.
Distributing the applications across a number of resources or resource tiers, and/or increasing the number of replicas of the applications or application components can increase reliability and availability of the applications, but simultaneously may negatively impact performance by increasing latency between the application components. Similarly, resources used to replicate applications or application components are removed from the available resources pool.